﻿using Microsoft.Practices.Prism.Logging;

namespace CPN.PJN.Silverlight.Common.Logging.Composite
{
    /// <summary>
    /// Cette classe représente l'adapter pour les logs issus de PRISM
    /// </summary>
    public class CompositeLoggerAdapter : ILoggerFacade
    {
        #region CategoryName Property
        
        /// <summary>
        /// Categorie de log à configurer pour la logger
        /// </summary>
        public string CategoryName { get; private set; } 

        #endregion
        
        #region Constructor

        /// <summary>
        /// Constructeur par défaut
        /// </summary>
        public CompositeLoggerAdapter(string categoryName)
        {
            this.CategoryName = categoryName;
        }

        #endregion

        #region ILoggerFacade Membres

        /// <summary>
        /// Cette méthode permet d'implémenter l'écriture de log par le le composant PRISM
        /// </summary>
        /// <param name="message">Message a écrire</param>
        /// <param name="category">Catérogie PRISM de log</param>
        /// <param name="priority">Priorité PRISM de log</param>
        public void Log(string message, Category category, Priority priority)
        {
            var severity = LogSeverity.Verbose;
            switch (category)
            {
                case Category.Debug:
                    severity = LogSeverity.Verbose;
                    break;
                case Category.Exception:
                    severity = LogSeverity.Critical;
                    break;
                case Category.Info:
                    severity = LogSeverity.Information;
                    break;
                case Category.Warn:
                    severity = LogSeverity.Error;
                    break;
                default:
                    break;
            }

            Logger.Instance.Write(message, this.CategoryName, severity);
        }

        #endregion
    }
}
